
BUILD_DIR=$(shell pwd)
EGTS_SRC_ROOT=$(realpath $(BUILD_DIR)/../../src)
EGTS_PROBES=$(realpath $(BUILD_DIR)/../../probes)

EGTS_INCLUDE=$(EGTS_SRC_ROOT)/include

################################################################################
#
#

TARGET_CROSS=
TARGET_PROBE1=$(EGTS_PROBES)/probe1
TARGET_PROBE2=$(EGTS_PROBES)/probe2 
TARGET_SMS_GET=$(EGTS_PROBES)/sms/get/pdu_get
TARGET_SMS_SET=$(EGTS_PROBES)/sms/set/pdu_set

################################################################################
#
#

DEFINE =
CFLAGS = -g -Wall -Wextra -pedantic -std=iso9899:1990
INCLUDE = -I$(EGTS_INCLUDE)
LDFLAGS = -g 

AR=$(TARGET_CROSS)ar
AS=$(TARGET_CROSS)as
LD=$(TARGET_CROSS)g++
NM=$(TARGET_CROSS)nm
CC=$(TARGET_CROSS)gcc
GCC=$(TARGET_CROSS)gcc
CXX=$(TARGET_CROSS)g++ 
RANLIB=$(TARGET_CROSS)ranlib
OBJCOPY=$(TARGET_CROSS)objcopy
STRIP=$(TARGET_CROSS)strip 

################################################################################
# sources 
#

TRANSPORT_SRC= \
  $(EGTS_SRC_ROOT)/transport/egts_backbuf.c \
  $(EGTS_SRC_ROOT)/transport/egts_compress.c \
  $(EGTS_SRC_ROOT)/transport/egts_crc.c \
  $(EGTS_SRC_ROOT)/transport/egts_dump.c \
  $(EGTS_SRC_ROOT)/transport/egts_encode.c \
  $(EGTS_SRC_ROOT)/transport/egts_header_encode.c \
  $(EGTS_SRC_ROOT)/transport/egts_impl.c \
  $(EGTS_SRC_ROOT)/transport/egts_rx.c \
  $(EGTS_SRC_ROOT)/transport/egts_rx_fd.c \
  $(EGTS_SRC_ROOT)/transport/egts_signup.c \
  $(EGTS_SRC_ROOT)/transport/egts_tx.c \
  $(EGTS_SRC_ROOT)/transport/egts_time.c

SMS_SRC= \
  $(EGTS_SRC_ROOT)/sms/sms_global.c \
  $(EGTS_SRC_ROOT)/sms/sms_pdu_get.c \
  $(EGTS_SRC_ROOT)/sms/sms_pdu_set.c

SERVICE_AUTH_SRC = \
  $(EGTS_SRC_ROOT)/services/auth/egts_auth.c \
  $(EGTS_SRC_ROOT)/services/auth/egts_auth_info.c \
  $(EGTS_SRC_ROOT)/services/auth/egts_auth_params.c \
  $(EGTS_SRC_ROOT)/services/auth/egts_module_data.c \
  $(EGTS_SRC_ROOT)/services/auth/egts_result_code.c \
  $(EGTS_SRC_ROOT)/services/auth/egts_service_info.c \
  $(EGTS_SRC_ROOT)/services/auth/egts_term_identity.c \
  $(EGTS_SRC_ROOT)/services/auth/egts_vehicle_data.c

SERVICE_ECALL_SRC = \
  $(EGTS_SRC_ROOT)/services/ecall/egts_accel_data.c \
  $(EGTS_SRC_ROOT)/services/ecall/egts_ecall.c \
  $(EGTS_SRC_ROOT)/services/ecall/egts_msd_data.c \
  $(EGTS_SRC_ROOT)/services/ecall/egts_raw_msg_data.c \
  $(EGTS_SRC_ROOT)/services/ecall/egts_track_data.c

SERVICE_FIRMWARE_SRC = \
  $(EGTS_SRC_ROOT)/services/firmware/egts_firmware.c \
  $(EGTS_SRC_ROOT)/services/firmware/egts_full_data.c \
  $(EGTS_SRC_ROOT)/services/firmware/egts_part_data.c

SERVICE_COMMANDS_SRC = \
  $(EGTS_SRC_ROOT)/services/commands/egts_command.c \
  $(EGTS_SRC_ROOT)/services/commands/egts_command_data.c

SERVICES_SRC = \
  $(EGTS_SRC_ROOT)/services/egts_services.c \
  $(EGTS_SRC_ROOT)/services/egts_response.c \
  $(SERVICE_AUTH_SRC) \
  $(SERVICE_ECALL_SRC) \
  $(SERVICE_FIRMWARE_SRC) \
  $(SERVICE_COMMANDS_SRC)	


PROBE1_SRC = \
  $(EGTS_PROBES)/egts_transport_probe1.c \
  $(EGTS_PROBES)/egts_probes.c \
  $(EGTS_PROBES)/egts_probe.c \
  $(EGTS_PROBES)/auth/probe_auth.c \
  $(EGTS_PROBES)/commands/probe_commands.c \
  $(EGTS_PROBES)/ecall/probe_ecall.c \
  $(EGTS_PROBES)/firmware/probe_firmware.c \
  $(TRANSPORT_SRC) \
  $(SERVICES_SRC)

PROBE2_SRC = \
  $(EGTS_PROBES)/egts_transport_probe2.c \
  $(EGTS_PROBES)/egts_probes.c \
  $(EGTS_PROBES)/egts_probe.c \
  $(EGTS_PROBES)/auth/probe_auth.c \
  $(EGTS_PROBES)/commands/probe_commands.c \
  $(EGTS_PROBES)/ecall/probe_ecall.c \
  $(EGTS_PROBES)/firmware/probe_firmware.c \
  $(TRANSPORT_SRC) \
  $(SERVICES_SRC)
  
PDU_GET_SRC = \
  $(EGTS_PROBES)/sms/get/pdu_get.c \
  $(SMS_SRC)

PDU_GET_SRC = \
  $(EGTS_PROBES)/sms/set/pdu_set.c \
  $(SMS_SRC)

################################################################################
# objects
#

TARGET_PROBE1_C_OBJS  = $(PROBE1_SRC:.c=.o)
TARGET_PROBE2_C_OBJS  = $(PROBE2_SRC:.c=.o)
PDU_GET_C_OBJS  = $(PDU_GET_SRC:.c=.o)
PDU_GET_C_OBJS  = $(PDU_GET_SRC:.c=.o)

################################################################################
#  
#

all : $(TARGET_PROBE1) $(TARGET_PROBE2) $(TARGET_SMS_GET) $(TARGET_SMS_SET)

clean: 
	rm -f $(TARGET_PROBE1_C_OBJS)
	rm -f $(TARGET_PROBE1)
	rm -f $(TARGET_PROBE2_C_OBJS)
	rm -f $(TARGET_PROBE2) 
	rm -f $(PDU_GET_C_OBJS)
	rm -f $(TARGET_SMS_GET) 
	rm -f $(PDU_GET_C_OBJS)
	rm -f $(TARGET_SMS_SET) 

$(TARGET_PROBE1): $(TARGET_PROBE1_C_OBJS)
	$(LD) $(LDFLAGS) -lc $(TARGET_PROBE1_C_OBJS) -o $(TARGET_PROBE1)   

$(TARGET_PROBE2): $(TARGET_PROBE2_C_OBJS)
	$(LD) $(LDFLAGS) -lc $(TARGET_PROBE2_C_OBJS) -o $(TARGET_PROBE2)   

$(TARGET_SMS_GET): $(PDU_GET_C_OBJS)
	$(LD) $(LDFLAGS) -lc $(PDU_GET_C_OBJS) -o $(TARGET_SMS_GET)  

$(TARGET_SMS_SET): $(PDU_GET_C_OBJS)
	$(LD) $(LDFLAGS) -lc $(PDU_GET_C_OBJS) -o $(TARGET_SMS_SET)  

.SECONDEXPANSION:

%.o: %.c
	$(CC) $(DEFINE) $(CFLAGS) $(INCLUDE) -c $< -o $@ 





